#include<iostream>
#include<vector>
#include<cstdio>
#include<unistd.h>
#include<sys/types.h>
#include<sys/wait.h>

using namespace std;

vector<int> data;


const string gsep=" ";
enum{
  OK=1,
  OPEN_FILE_ERROR,
};


int SaveBegin()
{
   string name=to_string(time(nullptr));
   name+=".backup";
   FILE *fp = fopen(name.c_str(),"w");
   if(fp==nullptr) return OPEN_FILE_ERROR;
   string dataStr;
   for(auto d: data)
   {
      dataStr += to_string(d);
      dataStr += gsep;
   }
   fputs(dataStr.c_str(),fp);
   fclose(fp);
   return OK;
  
}

void Save()
{
  pid_t id=fork();
  if(id==0) //子进程
  {
    int code=SaveBegin();
    exit(0);
  }
  else 
  {
      int status=0;
      pid_t rid=waitpid(id,&status,0);
      if(rid>0)
      {
        int code = WEXITSTATUS(status);
        if(code==0) printf("备份成功,exit code: %d\n",code);
        else printf("备份失败,exit code: %d\n",code);
      }
      else{
        perror("waitpid");
      }
  }
}

int main()
{
  int cnt=1;
  while(true)
  {
    data.push_back(cnt++);
    sleep(1);

    if(cnt%10==0)
    {
      Save();
    }
  }

  
  return 0;
}
